using System;
using System.Collections;
using System.Globalization;
using System.Linq;
using System.Windows.Data;
using WPFTemplateLib.WpfConverters.Core;

namespace WPFTemplateLib.WpfConverters
{
	/// <summary>
	/// [多值转换器] 判断列表是否包含元素并返回指定值
	/// </summary>
	/// <remarks>
	/// <para/>绑定规则：第一个为列表，后续为需要判断是否包含的元素(1~n个)，包含任意一个则判定为包含，返回true返回值。<para/>
	/// 参数规则：【true返回值:false返回值:值类型(<see cref = "ConvertResultType" /> 的字符串形式)】
	/// 其中值类型取值：1-Visibility，2-Bool，3-String，4-Int，5-Float，6-Double 等 <para/>
	///	绑定内容数小于2，或者绑定的第一个对象不是<see cref="IList"/>类型，则返回false返回值。
	/// </remarks>
	public class ListContainsElementMultiConverter : IMultiValueConverter
	{
		public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
		{
			string[] paraArray = ConverterHelper.ConvertParaToTrueFalseValueAndType(parameter);

			bool isContains = false;
			if(values.Length >= 2 && values[0] is IList list)
			{
				isContains = values.Skip(1).ToList().Exists(x=> list.Contains(x));
			}

			string resultStr = isContains ? paraArray[0] : paraArray[1];
			return ConverterHelper.ConvertValue(resultStr, paraArray[2]);
		}

		

		public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
		{
			throw new NotImplementedException();
		}
	}
}
